将 Linux 进程运行在后台的方法有哪些


  • 在命令的末尾加上 “&” 符号

    • 缺点: 输出的日志会随时出现不利于查看

python manage.py runserver &

  • 使用 nohup 命令 + &

    • nohup 命令会在当前目录下生成一个 nohup.out 文件,用于记录所运行指定命令时所生成的日志

    • & 在后台运行 Linux 进程

nohup python manage.py runserver &

  • 使用进程管理功能

    • supervisor

supervisor 的介绍


  • supervisor 是基于 python 的任务管理工具,用来自动运行各种后台任务,当然你也能直接利用 nohup 命令使任务自动后台运行,但如果要重启任务,每次都自己手动 kill 掉任务进程,这样很繁琐,而且一旦程序错误导致进程退出的话,系统也无法自动重载任务

  • 通俗理解: supervisor 帮助我们启动和关闭进程(软件或项目)

supervisor 的安装


  • 由于 supervisor 在 python3 下无法使用,因此只能用 python2 去下载

  • 安装 supervisor 需要使用 python2 的包管理工具 easy_install,并且要退出虚拟环境进行安装

  • 安装 easy_install

    • easy_install 就相当于 pip

# 注意: 此时已经退出了虚拟环境

yum install python-setuptools -y

  • 安装 supervisor

easy_install supervisor

supervisor 的使用


1. 生成 supervisor 配置文件

echo_supervisord_conf > /etc/supervisord.conf

2. supervisor 配置项的说明

  • 注意: 新的配置项需要到 supervisor 配置文件的底部

  • supervisor 配置项说明

# xxx 代表进程名称
[program:xxx]

# 程序启动的命令
command = /opt/apache-tomcat-8.0.35/bin/catalina.sh run

# 在supervisord启动的时候也自动启动
autostart = true

# 启动10秒后没有异常退出,就表示进程正常启动了,默认为1秒
startsecs = 10

# 程序退出后自动重启,可选值:[unexpected,true,false],默认为unexpected,表示进程意外杀死后才重启
autorestart = true

# 启动失败自动重试次数,默认是3
startretries = 3

# 用哪个用户启动进程,默认是root
user=tomcat

# 进程启动优先级,默认999,值小的优先启动
priority = 999

# 把stderr重定向到stdout,默认false
redirect_stderr = true

# 指定 stdout 日志文件的存放路径
stdout_logfile = /opt/apache-tomcat-8.0.35/logs/catalina.out

# stdout 日志文件大小,默认50MB
stdout_logfile_maxbytes = 20MB

# stdout 日志文件备份数,默认是10; stdout 日志文件,需要注意当指定目录不存在时无法正常启动,所以需要手动创建目录(supervisord 会自动创建日志文件)
stdout_logfile_backups = 20

# 默认为false,进程被杀死时,是否向这个进程组发送stop信号,包括子进程
stopasgroup = false

# 默认为false,向进程组发送kill信号,包括子进程
killasgroup = false

3. 添加 supervisor 配置项

  • 进入 supervisor 配置文件

vim /etc/supervisord.conf

  • 在 supervisor 底部添加新的配置项

    • 这里添加的配置项就是通过 supervisor 启动或关闭 uWSGI 章节中 test_django 项目

[program:test_django]

# 启动 uWSGI 的命令
# command = 虚拟环境中 uWSGI软件 的绝对路径 --ini 当前项目所对应的 uWSGI 配置文件的绝对路径
command = /root/Envs/env1/bin/uwsgi --ini /opt/django_project/test_django/uwsgi_settings.ini


4.启动 supervisor 服务

supervisord -c /etc/supervisord.conf

5.启动你所配置的所有进程(即: 进入 supervisor 交互界面

supervisorctl -c /etc/supervisord.conf


6.访问指定网址


supervisor 的命令


1.启动 supervisor 服务

supervisord -c /etc/supervisord.conf

2.启动 supervisor 服务后遇到以下错误的解决办法


  • ① 结束掉 supervisor 的进程

kill -9 9525


  • ② 执行以下命令

unlink /tmp/supervisor.sock

  • ③ 重新启动 supervisor 服务

supervisord -c /etc/supervisord.conf


3.启动某个或所有进程

  • 启动你所配置某个进程

    • 命令: supervisorctl -c /etc/supervisord.conf start 进程名称

supervisorctl -c /etc/supervisord.conf start test_django

    • 命令: supervisorctl start 进程名称

supervisorctl start test_django

  • 启动所有你所配置的进程

supervisorctl -c /etc/supervisord.conf start all

supervisorctl start all

4.停止某个或所有进程

  • 停止你所配置某个进程

    • 命令: supervisorctl -c /etc/supervisord.conf stop 进程名称

supervisorctl -c /etc/supervisord.conf stop test_django

    • 命令: supervisorctl stop 进程名称

supervisorctl stop test_django

  • 停止所有你所配置的进程

supervisorctl -c /etc/supervisord.conf stop all

supervisorctl stop all

5.重启某个或所有进程

  • 重启你所配置某个进程

    • 命令: supervisorctl -c /etc/supervisord.conf restart 进程名称

supervisorctl -c /etc/supervisord.conf restart test_django

    • 命令: supervisorctl restart 进程名称

supervisorctl restart test_django

  • 重启所有你所配置的进程

supervisorctl -c /etc/supervisord.conf restart all

supervisorctl restart all

6.查看某个或所有进程的状态

  • 查看你所配置的进程状态

    • 命令: supervisorctl -c /etc/supervisord.conf status 进程名称

supervisorctl -c /etc/supervisord.conf status test_django

    • 命令: supervisorctl status 进程名称

supervisorctl status test_django

  • 查看所有你所配置的进程状态

supervisorctl -c /etc/supervisord.conf status all

supervisorctl status all

7.更新新的配置到 supervisor 中

supervisorctl update

8.重新启动配置中的所有程序

supervisorctl reload

9.查看错误信息

  • 当启动某个你所配置的进程的时候发生了错误,可以一下命令查看错误信息

  • 命令: supervisorctl tail 进程名称 stderr

supervisorctl tail test_django stderr

10.启动你所配置的所有进程 -> 进入 supervisor 交互状态

supervisorctl -c /etc/supervisord.conf

supervisorctl

11.进入 supervisor 交互状态后的命令

  • 启动某个或所有进程

    • 启动你所配置某个进程

      • 命令: start 进程名称

supervisor> start test_django

    • 启动所有你所配置的进程

supervisor> start all

  • 停止某个或所有进程

    • 停止你所配置某个进程

      • 命令: stop 进程名称

supervisor> stop test_django

    • 停止所有你所配置的进程

supervisor> stop all

  • 重启某个或所有进程

    • 重启你所配置某个进程

      • 命令: restart 进程名称

supervisor> restart test_django

    • 重启所有你所配置的进程

supervisor> restart all

  • 查看某个或所有进程的状态

    • 查看你所配置的进程状态

      • 命令: status 进程名称

supervisor> status test_django

    • 查看所有你所配置的进程状态

supervisor> status all